package com.wn.base;

/**
 * @FileName: Demo
 * @Description: TODO
 * @Author: MaWenHao
 * @Created: 2020/9/12 - 12:48
 * @Version: V1.0
 * @Company: 东方微银科技（北京）有限公司
 */
public class Demo {

    public static void main(String[] args) {
        int[] candies = {3, 5, 7, 2, 8, 8, 15, 3};
        int[] coin = {1, 0, 1, 0, 1, 0, 1, 0};
        int n = 3;
        System.out.println(maxCandies(candies, coin, n));
    }

    public static int maxCandies(int[] candies, int[] coin, int n) {
        if (candies.length != coin.length || n < 0) {
            throw new RuntimeException("数据有误");
        }
        // 先计算不使用技能的情况下梅宝能获得多少糖
        int sum = 0;
        for (int i = 0; i < coin.length; i++) {
            if (coin[i] == 0) {
                sum += candies[i];
            }
        }
        // 在计算使用技能最多可以额外获得的糖
        int extra = 0; // 额外可最多获得的糖
        int tmp = 0; // 每一种情况获得的额外糖果
        // 穷举,总共需要遍历的次数
        for (int i = 0; i <= coin.length - n; i++) {
            // 每次只需要计算i到n之间额外可获得的糖即可
            for (int j = i; j < i + n; j++) {
                // 这里只计算本来不是梅宝的,但因为技能而额外收获的糖
                if (coin[j] == 1) {
                    tmp += candies[j];
                }
            }
            // 求所有情况中额外获得最多的糖果
            if (tmp > extra) {
                extra = tmp;
            }
            // 将tmp重置
            tmp = 0;
        }
        // 返回本该获得的糖和额外可最多获得的糖
        return sum + extra;
    }
}
